package com.wxm.param;

import com.alibaba.fastjson.annotation.JSONField;
import com.wxm.utils.ParamJsonUtils;
import lombok.Data;

import javax.validation.constraints.Max;
import javax.validation.constraints.NotEmpty;
import java.io.Serializable;

/**
 * <p>
 *     通联统一支付参数
 * </p>
 *
 * @author: wxm
 * @Date: 2023/4/7
 */
@Data
public class TlUnifiedPayParam extends TlBaseParam implements Serializable, ParamJsonUtils {
    /**
     * 交易金额，单位为分
     */
    @JSONField(name = "trxamt")
    private Long trxAmt;

    /**
     * 商户交易订单号
     */
    @JSONField(name = "reqsn")
    @NotEmpty(message = "商户交易订单号不能为空")
    private String reqSn;

    /**
     * 交易方式
     */
    @JSONField(name = "paytype")
    @NotEmpty(message = "交易方式不能为空")
    private String payType;

    /**
     * 商户生产随机字符串
     */
    @JSONField(name = "randomstr")
    @NotEmpty(message = "随机字符串不能为空")
    private String randomStr;

    /**
     * 订单商品名称，为空则以商户名作为商品名称
     */
    private String body;

    /**
     * 备注,最大160个字节(80个中文字符)
     * 禁止出现+，空格，/，?，%，#，&，=这几类特殊符号
     */
    private String remark;

    /**
     * 订单有效时间，以分为单位，不填默认为5分钟
     * 最大1440分钟
     */
    @Max(value = 1440)
    @JSONField(name = "validtime")
    private Integer validTime;

    /**
     * 支付平台用户标识
     * JS支付时使用
     * 微信支付-用户的微信openid
     * 支付宝支付-用户user_id
     * 微信小程序-用户小程序的openid
     * 云闪付JS-用户userId
     */
    private String acct;

    /**
     * 交易结果通知地址
     * 接收交易结果的通知回调地址，通知url必须为直接可访问的url，不能携带参数。
     * 因为刷卡支付交易结果实时返回,因此对于刷卡支付，该字段无效
     */
    @JSONField(name = "notify_url")
    private String notifyUrl;

    /**
     * 支付限制，no_credit--指定不能使用信用卡支付
     * api暂时只对微信支付和支付宝有效,仅支持no_credit
     */
    @JSONField(name = "limit_pay")
    private String limitPay;

    /**
     * 微信子id，只对微信支付有效
     */
    @JSONField(name = "sub_appid")
    private String subAppid;

    /**
     * 订单优惠标识，只对微信支付有效
     */
    @JSONField(name = "goods_tag")
    private String goodsTag;

    /**
     * 微信单品优惠信息，json字符串
     */
    @JSONField(name = "benefitdetail")
    private String benefitDetail;

    /**
     * 渠道门店编号
     * 例如对于支付宝支付，支付宝门店编号,对于微信支付，微信门店编号
     */
    @JSONField(name = "chnlstoreid")
    private String chnlStoreId;

    /**
     * 门店号
     */
    private String subbranch;

    /**
     * 拓展参数
     */
    @JSONField(name = "extendparams")
    private String extendParams;

    /**
     * 终端ip
     */
    @JSONField(name = "cusip")
    private String cusIp;

    /**
     * 支付跳转地址
     * 必须为https协议地址，且不允许带参数
     */
    @JSONField(name = "front_url")
    private String frontUrl;

    /**
     * 证件号
     * 实名交易必填.填了此字段就会验证证件号和姓名
     */
    @JSONField(name = "idno")
    private String idNo;

    /**
     * 付款人真实姓名
     */
    @JSONField(name = "truename")
    private String trueName;

    /**
     * 分账信息
     * 格式:
     * cusid:type:amount;cusid:type:amount…
     * 其中
     * cusid:接收分账的通联商户号
     * type分账类型（01：按金额  02：按比率）
     * 如果分账类型为02，则分账比率为0.5表示50%。如果分账类型为01，则分账金额以元为单位表示
     */
    @JSONField(name = "asinfo")
    private String asInfo;

    /**
     * 花呗分期
     */
    @JSONField(name = "asinfo")
    private String fqNum;
}
